欢迎关注“小丫画图”公众号,回复“小白”,看小视频,实现点鼠标跑代码。
小丫微信: epigenomics E-mail: figureya@126.com
作者:@ 西红柿
小丫编辑校验
小丫姐,能众筹利用USCS上的pan-cancer数据分别通过EPIC和Cibersort算法,计算各个肿瘤的免疫细胞浸润信息,并输出结果,同时计算某个指定基因在各个肿瘤中分别与免疫细胞的相关性,并分别输出相关性热图和相关性信息的excel表?
例文只使用了一种方法,我想用多种方法来证明相关性
出自https://www.frontiersin.org/articles/10.3389/fonc.2021.634617/full
FIGURE 7 | Associations of CD96 expression to tumor purity and immune infiltration. (B) The correlations of CD96 expression and immune infiltration in cancers.
Besides, we employed TIMER2.0 to exhibit the landscape of CD96 correlating with various immune infiltrates in human cancers (Figure 7B). # 应用场景
分别用TIMER、EPIC、Cibersort计算各个肿瘤的免疫细胞浸润信息。
热图可用于展示目的基因在泛癌中与免疫浸润之间的关系。
下面分别展示TIMER、EPIC、Cibersort这三种计算方法并画图(例文用的是TIMER2.0)。三种方法的细胞不同,可相互参照,结合研究兴趣,讨论自己的结果。
使用国内镜像安装包
options("repos"= c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="http://mirrors.tuna.tsinghua.edu.cn/bioconductor/")
install.packages("showtext")
# 安装IOBR,参照https://github.com/IOBR/IOBR
if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")
depens <- c('tibble', 'survival', 'survminer', 'sva', 'limma', "DESeq2","devtools",
'limSolve', 'GSVA', 'e1071', 'preprocessCore', 'ggplot2', "biomaRt",
'ggpubr', "devtools", "tidyHeatmap", "caret", "glmnet", "ppcor", "timeROC","pracma")
for(i in 1:length(depens)){
depen<-depens[i]
if (!requireNamespace(depen, quietly = TRUE))
BiocManager::install(depen,update = FALSE)
}
if (!requireNamespace("remotes", quietly = TRUE)) install("remotes")
if (!requireNamespace("EPIC", quietly = TRUE))
remotes::install_github("GfellerLab/EPIC", build_vignettes=TRUE)
if (!requireNamespace("MCPcounter", quietly = TRUE))
remotes::install_github("ebecht/MCPcounter",ref="master", subdir="Source")
if (!requireNamespace("estimate", quietly = TRUE)){
rforge <- "http://r-forge.r-project.org"
install.packages("estimate", repos=rforge, dependencies=TRUE)
}
devtools::install_github("IOBR/IOBR")
# 如果网络不好,可以从github下载后本地安装,安装包已上传至https://share.weiyun.com/g2BTNgVX
install.packages("IOBR-master.tar.gz", repos = NULL, type = "source")
加载包
library(ggplot2)
library(ggpubr)
library(patchwork)
library(showtext)
## Loading required package: sysfonts
## Loading required package: showtextdb
library(EPIC)
library(IOBR)
## Loading required package: tibble
## Loading required package: dplyr
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Loading required package: survival
## Loading required package: ComplexHeatmap
## Loading required package: grid
## ========================================
## ComplexHeatmap version 2.4.3
## Bioconductor page: http://bioconductor.org/packages/ComplexHeatmap/
## Github page: https://github.com/jokergoo/ComplexHeatmap
## Documentation: http://jokergoo.github.io/ComplexHeatmap-reference
##
## If you use it in published research, please cite:
## Gu, Z. Complex heatmaps reveal patterns and correlations in multidimensional
## genomic data. Bioinformatics 2016.
##
## This message can be suppressed by:
## suppressPackageStartupMessages(library(ComplexHeatmap))
## ========================================
## Loading required package: tidyHeatmap
## ========================================
## tidyHeatmap version 1.2.2
## If you use tidyHeatmap in published research, please cite:
## 1) Mangiola et al. tidyHeatmap: an R package for modular heatmap production
## based on tidy principles. JOSS 2020.
## 2) Gu, Z. Complex heatmaps reveal patterns and correlations in multidimensional
## genomic data. Bioinformatics 2016.
## This message can be suppressed by:
## suppressPackageStartupMessages(library(tidyHeatmap))
## ========================================
##
## Attaching package: 'tidyHeatmap'
## The following object is masked from 'package:stats':
##
## heatmap
## ==========================================================================
## IOBR v0.99.9 For help: https://github.com/IOBR/IOBR/issues
##
## If you use IOBR in published research, please cite:
## DQ Zeng, ZL Ye, RF Sheng, GC Yu, …, WJ Liao*.
## IOBR: Multi-omics Immuno-Oncology Biological Research to decode
## tumor microenvironment and signatures. bioRxiv, 2020.2012.2014.422647 (2020).
## DOI: 10.1101/2020.12.14.422647
## ==========================================================================
showtext.auto(enable = TRUE)
## 'showtext.auto()' is now renamed to 'showtext_auto()'
## The old version still works, but consider using the new function in future code
font.add('arial', 'arial.ttf') #设置字体,windows用户
## 'font.add()' is now renamed to 'font_add()'
## The old version still works, but consider using the new function in future code
Sys.setenv(LANGUAGE = "en") #显示英文报错信息
options(stringsAsFactors = FALSE) #禁止chr转成factor
Methods: Tumor IMmune Estimation Resource 2.0 (TIMER2.0; http://timer.cistrome.org/) web server is a comprehensive resource forsystematical analysis of immune infiltrates across diverse cancertypes. At first, we used it to study the differential expressionof CD96 between tumor and adjacent normal tissues across all TCGA cohorts.
We then explored the association between CD96 expression and immune infiltration based on several immune deconvolution algorithms
进入 TIMER2.0 或者 TIMER2.0 (comp-genomics.org),按一下步骤获得分析结果文件:
Gene Expression里选择CD96Immune Infiltrates里每次选一种免疫细胞SubmitTable下载分析结果data文件夹里除了从TIMER下载的Table表以外,不要放其他任何文件。
setwd("./data")
file <- dir()
data <- list()
for (i in (1:length(file))) {
data[[i]] <- read.csv(file[i],header = T)
}
TIMER的免疫细胞分类细致,有19类,例文给每一类画成一个小热图,排成了两行,因此画图时麻烦些。
# y轴排列顺序
name <- c("UVM (n=80)", "UCS (n=57)", "UCEC (n=545)", "THYM (n=120)",
"THCA (n=509)", "TGCT (n=150)", "STAD (n=415)", "SKCM (n=471)",
"SKCM-Primary (n=103)", "SKCM-Metastasis (n=368)", "SARC (n=260)",
"READ (n=166)", "PRAD (n=498)", "PCPG (n=181)", "PAAD (n=179)",
"OV (n=303)", "MESO (n=87)", "LUSC (n=501)", "LUAD (n=515)",
"LIHC (n=371)", "LGG (n=516)", "KIRP (n=290)", "KIRC (n=533)",
"KICH (n=66)", "HNSC (n=522)", "HNSC-HPV + (n=98)", "HNSC-HPV- (n=422)",
"GBM (n=153)", "ESCA (n=185)", "DLBC (n=48)", "COAD (n=458)",
"CHOL (n=36)", "CESC (n=306)", "BRCA (n=1100)", "BRCA-LumB (n=219)",
"BRCA-LumA (n=568)", "BRCA-Her2 (n=82)", "BRCA-Basal (n=191)",
"BLCA (n=408)", "ACC (n=79)")
# 定义函数画heatmap
plot_tme <- function(x){
x$pvalue = ifelse(x$adj.p >= 0.05, "p≥0.05", "p<0.05")
x$cancer = factor(x$cancer, levels = name)
ggplot(x, aes(infiltrates, cancer,
shape = pvalue,
color = rho)) +
geom_point(size = 3) +
scale_shape_manual(values = c(15, 7)) +
scale_color_gradient2(low = "#2b8cbe",mid = "white",high = "#e41a1c") +
#scale_x_discrete(position = "top") +
theme_bw() +
theme(axis.title.y = element_blank(),
axis.title.x = element_blank(),
axis.text.x = element_text(angle = 90,hjust = 0,vjust = 0),
axis.text.x.bottom = element_text(family = "arial"))
}
# 画出19个热图
dd <- lapply(data, plot_tme)
#dd[[1]] # 可以这样查看每一个heatmap
# 设置和下半部分分割的位置
breakpoint <- 8 # 上面画8个热图,下面画19-8=11个
## 先画上半部分
# 画第1个热图(第1个热图左侧带label,其余不带)
up <- dd[[1]] +
scale_x_discrete(position = "top") +
guides(color=FALSE) + guides(shape=FALSE) # 不画图例
# 加上第2-8个热图
for (i in 2:(breakpoint)) {
up <- up + dd[[i]] +
scale_x_discrete(position = "top") +
theme(axis.text.y = element_blank()) + # 不画y轴label
guides(color = FALSE) + guides(shape = FALSE) # 不画图例
}
# 按照x轴来调整图片组合宽度
width_up <- NULL
for (i in 1:breakpoint) {
width_up <- c(width_up,length(unique(data[[i]]$infiltrates)))
}
# 画完上半部分
up + plot_layout(guides = 'collect',widths = width_up)
## Warning: Removed 10 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_point).
## Warning: Removed 8 rows containing missing values (geom_point).
## 画下半部分
# 画下面第1个
down <- dd[[breakpoint + 1]] + scale_x_discrete(position = "bottom") +
guides(color = FALSE) + guides(shape = FALSE) + # 不画图例
theme(axis.text.x = element_text(angle = 90,hjust = 1,vjust = 0))
# 画第10-18个热图
for (i in (breakpoint + 2):(length(file)-1)) {
down <- down + dd[[i]] + scale_x_discrete(position = "bottom") +
theme(axis.text.y = element_blank(),
axis.text.x = element_text(angle = 90,hjust = 1,vjust = 0)) +
guides(color=FALSE) + guides(shape=FALSE) # 不画图例
}
# 画第19个,画图例
down <- down + dd[[length(file)]] + scale_x_discrete(position = "bottom") +
theme(axis.text.y = element_blank(),
axis.text.x = element_text(angle = 90,hjust = 1,vjust = 0))
down <- down & scale_fill_continuous(limits = c(-1, 1))
# 按照x轴来调整图片组合宽度
width_down <- NULL
for (i in (breakpoint + 1):length(file)) {
width_down <- c(width_down,length(unique(data[[i]]$infiltrates)))
}
# 画完下半部分
down + plot_layout(guides = 'collect',widths = width_down)
## Warning: Removed 2 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_point).
## 上下组合
(up + plot_layout(guides = 'collect',widths = width_up))-(down + plot_layout(guides = 'collect',widths = width_down)) + plot_layout(nrow = 2)
## Warning: Removed 10 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_point).
## Warning: Removed 8 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_point).
# 保存到文件
ggsave("TIMER.pdf",
height=15, width=10)
## Warning: Removed 10 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_point).
## Warning: Removed 8 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_point).
# 输出的PDF文件是矢量图,可以用illustrator等矢量图编辑器打开,进一步调整图形、文字
免疫浸润算法强烈推荐IOBR(GitHub - IOBR/IOBR: IOBR is an R package to perform comprehensive analysis of tumor microenvironment and signatures for immuno-oncology.)
pancancer_mRNA_exprSet.Rdata,表达矩阵和癌症名type
expr_pancancer.Rda,表达矩阵,取自pancancer_mRNA_exprSet.Rdata。
数据来源于UCSC xena Pan-cancer,从数据下载到获得以上两个文件的过程见TCGA_pan.R(位于当前文件夹)。文件太大,已上传微云https://share.weiyun.com/g2BTNgVX
# 载入数据
(load("expr_pancancer.Rda"))
## [1] "expr"
expr[1:5,1:5]
## TCGA-OR-A5J1 TCGA-OR-A5J2 TCGA-OR-A5J3 TCGA-OR-A5J5 TCGA-OR-A5J6
## OR4F5 -9.9658 -9.9658 -9.9658 -9.9658 -9.9658
## FO538757.3 -9.9658 -9.9658 -3.4580 -9.9658 -3.6259
## FO538757.2 4.6502 3.9783 3.5803 3.6916 4.8724
## OR4F29 -9.9658 -6.5064 -9.9658 -3.8160 -9.9658
## OR4F16 -9.9658 -6.5064 -9.9658 -3.8160 -9.9658
dim(expr)
## [1] 17146 9712
(load("pancancer_mRNA_exprSet.Rdata"))
## [1] "mRNA_exprSet"
mRNA_exprSet[1:5,1:5]
## sample TCGA_id type subtype OR4F5
## 1 TCGA-OR-A5J1-01 TCGA-OR-A5J1 ACC 01 -9.9658
## 2 TCGA-OR-A5J2-01 TCGA-OR-A5J2 ACC 01 -9.9658
## 3 TCGA-OR-A5J3-01 TCGA-OR-A5J3 ACC 01 -9.9658
## 4 TCGA-OR-A5J6-01 TCGA-OR-A5J6 ACC 01 -9.9658
## 5 TCGA-OR-A5J7-01 TCGA-OR-A5J7 ACC 01 -9.9658
dim(mRNA_exprSet)
## [1] 7801 19729
#epic <- deconvo_tme(eset = expr,
# method = "epic",
# arrays = FALSE)
# save(epic,file = "epic.Rda")
load("epic.Rda")
dim(epic)
## [1] 7801 9
#epic[1:5,]
epic$ID <- gsub("\\.","-",epic$ID)
data <- merge(epic,
mRNA_exprSet,
by.x = "ID", by.y = "sample")
#data[1:5,]
dim(data)
## [1] 7800 19737
# 自定义计算相关性的函数
corr <- function(gene){
y <- as.numeric(data[, gene])
colnames <- colnames(epic[, 2:9])
do.call(rbind,lapply(colnames, function(x){
dd <- cor.test(as.numeric(data[, x]), y, type = "spearman")
data.frame(gene = gene, immune_cells = x,
cor = dd$estimate, p.value = dd$p.value )
}))
}
# 计算相关性
corr("CD96")
## gene immune_cells cor p.value
## cor CD96 Bcells_EPIC 0.201971593 1.337815e-72
## cor1 CD96 CAFs_EPIC 0.009873013 3.832944e-01
## cor2 CD96 CD4_Tcells_EPIC 0.480019990 0.000000e+00
## cor3 CD96 CD8_Tcells_EPIC 0.407591892 5.076429e-310
## cor4 CD96 Endothelial_EPIC -0.042554096 1.703373e-04
## cor5 CD96 Macrophages_EPIC 0.008188060 4.696516e-01
## cor6 CD96 NKcells_EPIC 0.067188593 2.855490e-09
## cor7 CD96 otherCells_EPIC -0.553441917 0.000000e+00
gene <- "CD96"
cancertype <- unique(data$type)
res <- data.frame(type=NULL,
gene=NULL,
immune_cells=NULL,
cor=NULL,
p.value=NULL)
for (i in cancertype){
data2 <- data %>% filter(type==i)
y <- as.numeric(data2[,gene])
colnames <- colnames(epic[,2:9])
dd2 <- do.call(rbind,lapply(colnames, function(x){
dd <- cor.test(as.numeric(data2[,x]),y,type = "spearman")
data.frame(type = i,
gene = gene,
immune_cells = x,
cor = dd$estimate,
p.value = dd$p.value )
}))
res <- rbind(res,dd2)
}
res$pvalue <- ifelse(res$p.value >= 0.05,"p≥0.05","p<0.05")
head(res)
## type gene immune_cells cor p.value pvalue
## cor GBM CD96 Bcells_EPIC 0.42256581 1.619400e-07 p<0.05
## cor1 GBM CD96 CAFs_EPIC -0.04028372 6.340841e-01 p≥0.05
## cor2 GBM CD96 CD4_Tcells_EPIC -0.17117552 4.166795e-02 p<0.05
## cor3 GBM CD96 CD8_Tcells_EPIC 0.34204163 3.096633e-05 p<0.05
## cor4 GBM CD96 Endothelial_EPIC -0.25386741 2.299519e-03 p<0.05
## cor5 GBM CD96 Macrophages_EPIC 0.15633575 6.317888e-02 p≥0.05
write.csv(res,"output_res.EPIC.csv")
EPIC只有8种细胞,画在一起就可以了。
保持跟上面TIMER组合图的风格一致。
ggplot(res, aes(immune_cells,
type,
shape = pvalue,
color = cor)) +
geom_point(size = 3) +
scale_shape_manual(values = c(15,7)) +
scale_color_gradient2(low = "#2b8cbe",
mid = "white",
high = "#e41a1c",
limits = c(-1, 1)) +
theme_bw() +
theme(axis.title.y = element_blank(),
axis.title.x = element_blank(),
axis.text.x = element_text(angle = 90,
hjust = 1,
vjust = 0,
family = "arial"))
ggsave("EPIC.pdf", width = 4, height = 7)
输入数据同“EPIC”的输入数据
# 用IOBR包计算
#cibersort <- deconvo_tme(eset = expr,
# method = "cibersort",
# arrays = FALSE,
# perm = 200 )
# pancancer的免疫细胞浸润信息可以用IOBR计算,也可以直接导入官方数据 [CIBERSORT immune fractions](https://gdc.cancer.gov/about-data/publications/panimmune)
# 这里直接导入官方数据
cibersort <- read.table("TCGA.Kallisto.fullIDs.cibersort.relative.tsv", header = T)
cibersort$SampleID <- substring(cibersort$SampleID,1,15)
cibersort$SampleID <- gsub("\\.","-",cibersort$SampleID)
cibersort <- merge(cibersort,
mRNA_exprSet,
by.x = "SampleID",
by.y = "sample")
gene <- "CD96"
res <- data.frame(type=NULL,
gene=NULL,
immune_cells=NULL,
cor=NULL,
p.value=NULL)
for (i in cancertype){
data2 <- cibersort %>% filter(type==i)
y <- as.numeric(data2[,gene])
colnames <- colnames(cibersort[,3:24])
dd2 <- do.call(rbind,lapply(colnames, function(x){
dd <- cor.test(as.numeric(data2[,x]),y,type = "spearman")
data.frame(type = i,
gene = gene,
immune_cells = x,
cor = dd$estimate,
p.value = dd$p.value )
}))
res <- rbind(res,dd2)
}
## Warning in cor(x, y): the standard deviation is zero
## Warning in cor(x, y): the standard deviation is zero
## Warning in cor(x, y): the standard deviation is zero
## Warning in cor(x, y): the standard deviation is zero
## Warning in cor(x, y): the standard deviation is zero
## Warning in cor(x, y): the standard deviation is zero
## Warning in cor(x, y): the standard deviation is zero
## Warning in cor(x, y): the standard deviation is zero
res$pvalue <- ifelse(res$p.value >= 0.05,"p≥0.05","p<0.05")
head(res)
## type gene immune_cells cor p.value pvalue
## cor GBM CD96 B.cells.naive 0.03270965 0.69814824 p≥0.05
## cor1 GBM CD96 B.cells.memory -0.02616166 0.75644282 p≥0.05
## cor2 GBM CD96 Plasma.cells 0.07045307 0.40307529 p≥0.05
## cor3 GBM CD96 T.cells.CD8 -0.18280972 0.02886319 p<0.05
## cor4 GBM CD96 T.cells.CD4.naive 0.02621328 0.75597738 p≥0.05
## cor5 GBM CD96 T.cells.CD4.memory.resting 0.06235925 0.45937045 p≥0.05
write.csv(res, "output_res.Cibersort.csv")
Cibersort有22种细胞,也可以画在一起。并保持跟以上两种方法的画图风格一致。
ggplot(res, aes(immune_cells,
type,
shape = pvalue,
color = cor)) +
geom_point(size = 3) +
scale_shape_manual(values = c(15,7)) +
scale_color_gradient2(limits = c(-1, 1),
low = "#2b8cbe",
mid = "white",
high = "#e41a1c") +
theme_bw() +
theme(axis.title.y= element_blank(),
axis.title.x = element_blank(),
axis.text.x = element_text(angle = 90,
hjust = 1,
vjust = 0,
family = "arial"))
## Warning: Removed 8 rows containing missing values (geom_point).
ggsave("Cibersort.pdf", width = 5, height = 7)
## Warning: Removed 8 rows containing missing values (geom_point).
sessionInfo()
## R version 4.0.2 (2020-06-22)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS 10.16
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
##
## locale:
## [1] zh_CN.UTF-8/zh_CN.UTF-8/zh_CN.UTF-8/C/zh_CN.UTF-8/zh_CN.UTF-8
##
## attached base packages:
## [1] grid stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] IOBR_0.99.9 tidyHeatmap_1.2.2 ComplexHeatmap_2.4.3
## [4] survival_3.2-10 dplyr_1.0.5 tibble_3.1.1
## [7] EPIC_1.1.5 showtext_0.9-2 showtextdb_3.0
## [10] sysfonts_0.8.3 patchwork_1.1.1 ggpubr_0.4.0
## [13] ggplot2_3.3.3
##
## loaded via a namespace (and not attached):
## [1] readxl_1.3.1 backports_1.2.1
## [3] circlize_0.4.12 GSEABase_1.50.1
## [5] splines_4.0.2 BiocParallel_1.22.0
## [7] GenomeInfoDb_1.24.2 digest_0.6.27
## [9] foreach_1.5.1 htmltools_0.5.1.1
## [11] viridis_0.6.0 fansi_0.4.2
## [13] magrittr_2.0.1 memoise_2.0.0
## [15] cluster_2.1.2 openxlsx_4.2.3
## [17] limma_3.44.3 readr_1.4.0
## [19] annotate_1.66.0 modelr_0.1.8
## [21] matrixStats_0.58.0 limSolve_1.5.6
## [23] lpSolve_5.6.15 colorspace_2.0-0
## [25] blob_1.2.1 rvest_1.0.0
## [27] haven_2.4.0 xfun_0.22
## [29] crayon_1.4.1 RCurl_1.98-1.3
## [31] jsonlite_1.7.2 graph_1.66.0
## [33] genefilter_1.70.0 zoo_1.8-9
## [35] iterators_1.0.13 glue_1.4.2
## [37] survminer_0.4.9 gtable_0.3.0
## [39] zlibbioc_1.34.0 XVector_0.28.0
## [41] GetoptLong_1.0.5 DelayedArray_0.14.1
## [43] car_3.0-10 shape_1.4.5
## [45] BiocGenerics_0.34.0 abind_1.4-5
## [47] scales_1.1.1 DBI_1.1.1
## [49] rstatix_0.7.0 Rcpp_1.0.6
## [51] viridisLite_0.4.0 xtable_1.8-4
## [53] clue_0.3-59 foreign_0.8-81
## [55] bit_4.0.4 proxy_0.4-25
## [57] km.ci_0.5-2 preprocessCore_1.50.0
## [59] GSVA_1.36.3 stats4_4.0.2
## [61] glmnet_4.1-1 httr_1.4.2
## [63] RColorBrewer_1.1-2 ellipsis_0.3.1
## [65] farver_2.1.0 pkgconfig_2.0.3
## [67] XML_3.99-0.6 sass_0.3.1
## [69] dbplyr_2.1.1 locfit_1.5-9.4
## [71] utf8_1.2.1 labeling_0.4.2
## [73] later_1.1.0.1 tidyselect_1.1.0
## [75] rlang_0.4.10 AnnotationDbi_1.50.3
## [77] munsell_0.5.0 cellranger_1.1.0
## [79] tools_4.0.2 cachem_1.0.4
## [81] generics_0.1.0 RSQLite_2.2.6
## [83] broom_0.7.6 evaluate_0.14
## [85] stringr_1.4.0 fastmap_1.1.0
## [87] yaml_2.2.1 knitr_1.32
## [89] bit64_4.0.5 fs_1.5.0
## [91] zip_2.1.1 survMisc_0.5.5
## [93] purrr_0.3.4 mime_0.10
## [95] xml2_1.3.2 shinythemes_1.2.0
## [97] compiler_4.0.2 curl_4.3
## [99] png_0.1-7 e1071_1.7-6
## [101] ggsignif_0.6.1 reprex_2.0.0
## [103] estimate_1.0.13 geneplotter_1.66.0
## [105] bslib_0.2.4 stringi_1.5.3
## [107] highr_0.9 forcats_0.5.1
## [109] lattice_0.20-41 Matrix_1.3-2
## [111] KMsurv_0.1-5 vctrs_0.3.7
## [113] pillar_1.6.0 lifecycle_1.0.0
## [115] jquerylib_0.1.3 GlobalOptions_0.1.2
## [117] data.table_1.14.0 cowplot_1.1.1
## [119] bitops_1.0-6 httpuv_1.5.5
## [121] GenomicRanges_1.40.0 R6_2.5.0
## [123] promises_1.2.0.1 gridExtra_2.3
## [125] rio_0.5.26 IRanges_2.22.2
## [127] codetools_0.2-18 MASS_7.3-53.1
## [129] assertthat_0.2.1 SummarizedExperiment_1.18.2
## [131] DESeq2_1.28.1 rjson_0.2.20
## [133] withr_2.4.2 S4Vectors_0.26.1
## [135] GenomeInfoDbData_1.2.3 parallel_4.0.2
## [137] hms_1.0.0 quadprog_1.5-8
## [139] tidyverse_1.3.1 tidyr_1.1.3
## [141] class_7.3-18 rmarkdown_2.7
## [143] carData_3.0-4 shiny_1.6.0
## [145] Biobase_2.48.0 lubridate_1.7.10